﻿<?php
class Upload{
	var $file;
	// Diretório onde será gravado o arquivo.
	var $dir;
	// Nome que será dado ao arquivo após o upload.
	var $name;
	//  Tipos de arquivos que serão aceitos pelo upload.
	var $type;
	// Tamanho máximo aceito.
	var $maxlength = 0;
	// mensagem exibida.
	var $message;
	function setDir( $dir ){
		$this->dir = $dir;
	}
	
	function setName( $name ){
		$this->name = $name;
	}
	
	function setTypes( $type ){
		$this->type = $type;
	}
	function setMaxLength( $maxlength ){
		$this->maxlength = $maxlength * 1024;
	}
	function getMessage(){
		return $this->message;
	}
	function get_size($size) {
		$bytes = array('B','KB','MB','GB','TB');
		foreach($bytes as $val) {
			if($size > 1024){
				$size = $size / 1024;
			}else{
				break;
			}
		}
		return round($size, 2)." ".$val;
	} 
	function validType( $type ){
		if ( count( $this->type ) == 0 ){
			return TRUE;
		} else {
			for ( $i = 0; $i < count( $this->type ); $i++ ){
				if ( $this->type[$i] == $type ){
					return TRUE;
				}
			}
		}
		$this->message = "Tipo de arquivo (" . $type . ") não aceito nessa operação.";
		return FALSE;
	}
	
	function validMaxlength( $length ){
		if ( $this->maxlength == 0 ){
			return TRUE;
		} else {
			if ( $this->maxlength > $length ){
				return TRUE;
			}
		}
		$this->message = "O limite estabelecido para upload é de " . $this->get_size($this->maxlength) . ".\nO arquivo enviado tem o tamanho de " . $this->get_size( $length ) . ".";
		return FALSE;
	}
	function execute( $file ){
		$typeTemp = $file['type'];
		$lengthTemp = $file['size'];
		$nameTemp = ( $this->name == "" )? $file['name'] : $this->name;
		if ( !$this->validType( $typeTemp ) ){
			return FALSE;
		}
		if ( !$this->validMaxlength( $lengthTemp ) ){
			return FALSE;
		}
		$copy = copy($file['tmp_name'], $this->dir . $nameTemp);
		return $copy;
	}

}
?>